Statistical multiplexing is often used to control the bitrates of multiple digitally encoded video programs such that the total aggregate bitrate of all the programs is held substantially constant. Although the total bitrate across all the programs can stay substantially the same at any point in time, the proportion of the total bitrate used to encode each individual program can change over time depending on the complexity level of each program.
For example, a statistical multiplexor that has four encoders can separately encode four different video programs at the same time. If all four programs have the same complexity level at a particular point in time, 25% of a total bitrate can be assigned to each of the four encoders. However, if at another point in time one program has a high complexity level, two programs have a medium complexity level, and the last program has a low complexity level, the statistical multiplexor can change the proportional bitrate assignments to provide more of the total bitrate to the most complex program and less of the total bitrate to the least complex program, such as assigning 30% of the total bitrate to the most complex program, 20% of the total bitrate to the least complex program, and 25% of the total bitrate to each of the other two programs with a medium complexity level. As such, a statistical multiplexor can keep the overall bitrate substantially constant, but vary the bitrates of each individual program over time depending on the relative complexity levels of the programs.
Most statistical multiplexing is traditionally done in a closed system in which a controller allocates bitrates proportionally among a plurality of known encoders. Generally, all of the encoders are set to encode video using the same codec, in the same format, at the same framerate, using the same type of hardware or software implementation. Each encoder generally reports a need parameter, a measure of how complex their current scene is, to the controller such that the controller can directly compare the need parameters from each encoder to determine the bitrate to assign to each.
However, this type of conventional closed system does not allow statistical multiplexing with an encoder pool that includes encoders of varying types and/or configurations. In such systems, the controller is generally preconfigured with a single encoder profile that indicates the optimal bitrate to assign for each complexity value. However, that bitrate may not be appropriate for different types or configurations of encoders that may report their complexity values on different scales, or need more or less bits to encode frames at a similar quality level due to differences in hardware or software processing and/or settings such as video framerate or resolution.